#include <iostream>
#include <vector>
#include <functional>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>

struct task_struct
{
    pid_t id;
    int count = 10;//时间片,
    void(*code)();//函数指针
    unsigned long data;
};
int timestamp = 0;

std::vector<task_struct> task_list;


//硬件中断
void Sched()
{
    std::cout << "我是进程调度" << std::endl;
    t.count--;
    if(t.count < 0)
        //切换其他进程,可以使用堆（最小堆）来调度进程
} 

void MemManger()
{
    std::cout << "我是周期性内存管理，正在检查内存有没有问题" <<std::endl; 
}

void Fflush()
{
    std::cout << "我是刷新程序，我正在定期刷新内存数据，到磁盘" << std::endl;

}

using func_t = std::function<void()>;

std::vector<func_t> funcs;

// void handlerSig(int sig)
// {
//     std:: cout << "获得一个信号: " << sig <<" Pid: " << getpid() << std::endl;
//     int n = alarm(1);
//     //std::cout <<"n=" << n <<std::endl;

// }

void handlerSig(int sig)
{
    timestamp++;//时间戳
    std:: cout << "########################################" << std::endl;
    for(auto f: funcs)
        f();
    std:: cout << "########################################" << std::endl;
    int n = alarm(1);
}

int main()
{
    funcs.push_back(Sched);
    funcs.push_back(MemManger);
    funcs.push_back(Fflush);


    signal(SIGALRM,handlerSig);
    alarm(1);

    while(true)//这就是操作系统
    {
        pause();
    }

    return 0;
}
